package thread;
//  juc  java并发包    java.util
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 *线程池
 * 线程池是线程的管理机制，主要解决两方面问题:
 * 1.重复使用线程，避免浪费
 * 2.控制线程数量，避免资源过度消耗，以及CPU过度切换导致卡顿等问题
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //创建具有2条线程的线程池
        ExecutorService threadPool = Executors.newFixedThreadPool(2);

        for (int i = 0; i < 5; i++) {
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread t = Thread.currentThread();
                        System.out.println(t.getName()+":正在执行一个任务...");
                        Thread.sleep(5000);
                        System.out.println(t.getName()+":执行任务完毕");
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }
                }
            };
            threadPool.execute(r);
            System.out.println("将一个任务交给了线程池");
        }

        //线程池不在接受新任务，线程池内部任务都执行完毕后结束
        //threadPool.shutdown(); //停止线程池

        //线程池会立即停止，并中断正在执行的任务
        threadPool.shutdownNow();
        System.out.println("停止线程池");
    }
}
